package cn.fl.project.service;

import java.util.List;
import java.util.Map;

import cmm.mid.core.framework.page.DataResultVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.project.condition.PrjQuatPrpsQueryCondition;
import cn.fl.project.dto.PrjQuatPrpsDTO;
import cn.fl.project.vo.PrjQuatPrpsVO;

/**
 * @Description: 项目报价方案表 客户端服务层接口
 * @Description: 持久层方法名称前缀：新增：insert* 删除：delete* 修改：update* 批量：batch* 查询对象：select* get* find* 查询集合：select*
 * @Description: 业务层方法名称前缀：新增：add* 删除：remove* 修改：modify* 查询对象：select* get* 批量：batch* 查询集合：search*
 */
public interface IPrjQuatPrpsService {
	
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public PrjQuatPrpsVO selectById(Long id)throws BaseException;
	
	/**
	 *  添加方案和费用详情
	 * @param entity
	 * @return
	 */
    public Long add(PrjQuatPrpsVO entity) throws BaseException;

    /**
     * 删除
     * @param id
     * @return
     */
    public boolean removeById(Long id)throws BaseException;
    
    /**
     * 删除
     * @param ids
     * @return
     */
    public boolean removeByIds(List<Long> ids)throws BaseException;

    /**
     *修改方案和费用详情
     * @param entity
     * @return
     */
    public boolean modify(PrjQuatPrpsVO entity)throws BaseException;

	/**
	 * 修改方案
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
    public boolean modifyPrjQuatPrps(PrjQuatPrpsVO entity) throws BaseException;

    /**
     * 根据项目id更新报价方案
     * @param entity
     * @return
     */
    boolean modifyQuatPrpsByPrjId(PrjQuatPrpsVO entity);
	/**
	 * 疫情项目
	 * @param prjQuatPrps
	 * @return
	 * @throws BaseException
	 */
	public PrjQuatPrpsVO prjQuatPrpsCalculateYq(PrjQuatPrpsVO prjQuatPrps) throws BaseException;
	
    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page)throws BaseException;
    /**
     * 根据项目方案选项进行测算
     * @param prjQuatPrps
     * @return
     * @throws BaseException
     */
	public PrjQuatPrpsVO prjQuatPrpsCalculate(PrjQuatPrpsVO prjQuatPrps)throws BaseException;
	/**
	 * 修改项目方案为默认的执行方案
	 * @param prjQuatPrps
	 * @return
	 */
	public boolean modifyIsFormalPrpsStatus(PrjQuatPrpsVO prjQuatPrps)throws BaseException;
	/**
	 * 查询项目方案列表
	 * @param qc
	 * @return
	 */
	public List<PrjQuatPrpsVO> searchList(PrjQuatPrpsQueryCondition qc)throws BaseException;
	/**
	 * 获取小数位数
	 * @return
	 * @throws BaseException
	 */
	public 	Map<String,String> getDecimalDigitsByBuOrgCode()throws BaseException;

	/**
	 * 获取小数位数
	 * @return
	 * @throws BaseException
	 */
	public 	Map<String,String> getDecimalDigitsByBuOrgCodeNew(String orgCd)throws BaseException;
	
	/**
	 * 检查产品费用项总合是否和方案的费用项相等
	 * @param prjId
	 * @return
	 * @throws BaseException
	 */
	public boolean checkPrjPrdQuatPrpsFee(Long prjId)throws BaseException;
	/**
	 * 检查是否可以选择阶梯价支付方式
	 * @param payPd
	 * @return
	 * @throws BaseException
	 */
	public boolean checkMultiStepStatus(Integer payPd,String orgCd)throws BaseException;
	/**
	 * 拆分报价版支付表信息
	 * @param id
	 * @throws BaseException
	 */
//	public void splitQuatPaySch(Long id)throws BaseException;
	/**
	 *生成报价版支付表和入录版数据
	 * @param id
	 * @throws BaseException
	 *//*
	public void modifyGenNomalPaySch(Long id)throws BaseException;*/
	/**
	 * 删除项目下的报价版、录入版数据
	 * @param prjId
	 * @throws BaseException
	 */
	public void removePrjQuatByPrjId(Long prjId)throws BaseException;
	/**
	 * 生成报价版方案、入录版方案、支付表数据
	 * @param prjQuatPrps
	 * @return
	 * @throws BaseException
	 */
	public Long modifyGenPrjQuatPrpsAndPayInfo(PrjQuatPrpsVO prjQuatPrps)throws BaseException;
	/**
	 * 重新计算IRR的值
	 * @throws BaseException
	 */
	public void addPrpsQuatIRRPct()throws BaseException;
	/**
	 * 获取首年还款比例
	 * @param currentSysCd
	 * @param buOrgCd
	 * @return
	 */
	public double getInitLsPct(String currentSysCd, String buOrgCd);
	
	/**
	 * 判断是否是新能源临时处理数据
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	public boolean getPrjQuatPrpsTempByPrjId(Long id)throws BaseException;
	/**
	 * 处理浙商转我司的数据
	 * @throws BaseException
	 */
	public void modifyDealZSChangeOurData()throws BaseException;
	/**
	 * 处理浙银金租转我司的数据
	 * @param prjId
	 * @param sysCd
	 * @param crtUsrId
	 * @throws BaseException
	 */
	//REQ-3756 36资管机构路由 by yaoxiurong 作废第三方资管城配,第三方资管传统 新增字段IS_INS_BIZ标识是否资管业务
    //public void modifyDealZgZyflChangeOurDataByPrjId(Long prjId,String sysCd,String crtUsrId)throws BaseException;
    /**
     * 处理浙银金历史数据
     * @throws BaseException
     */
    public DataResultVO modifyDealZYHistoryData()throws BaseException;

    /**
     * 厂商测算
     * @param prjQuatPrps
     * @return
     * @throws BaseException
     */
    public PrjQuatPrpsVO prjQuatPrpsCalculateForMfr(PrjQuatPrpsVO prjQuatPrps)throws BaseException;
    /**
     * 检查长城金租方案是否合规
     * @param prjQuatPrps
     * @throws BaseException
     */
    public void checkCCFYPrjQuatPrps(PrjQuatPrpsVO prjQuatPrps)throws BaseException;
    /**
     * 检查兴邦金租方案是否合规
     * @param prjQuatPrps
     * @throws BaseException
     */
    public PrjQuatPrpsVO checkZGXBFLPrjQuatPrps(PrjQuatPrpsVO prjQuatPrps)throws BaseException;

    /**
     * 逻辑删除方案信息
     * @param valueOf
     * @param currentUserId
     * @throws BaseException
     */
    public void removePrjQuatByPrjId(Long valueOf, Long currentUserId)throws BaseException;

	/**
	 * @Description 根据项目id移除报价信息
	 * @author shenhao
	 * @date 2021/3/10 15:50
	 * @param
	 * @return
	 */
	void removePrjQuatPrpsInfo(Long id);
}
